Passed
Push — main ( 394b21...fd6a98 )
by Andrii
02:09
created

bem.core.ts ➔ getOptions   A

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 5
c 0
b 0
f 0
rs 10
cc 1
1
import type { BemInGeneral } from "./bem.types"
2
3
const {isArray: $isArray} = Array
4
5
let modDelimiter = "--"
6
, elementDelimiter = "__"
7
8
export type BemOptions = {
9
  elementDelimiter: string
10
  modDelimiter: string
11
}
12
13
export {
14
  bem2arr,
15
  setOptions
16
}
17
18
function bem2arr(query: BemInGeneral) {
19
  const $return: string[] = []
20
21
  for (const base in query) {
22
    const baseQ = query[base]
23
    $return.push(base)
24
    
25
    if (!baseQ) 
26
      continue
27
    if (typeof baseQ !== "object") {
28
      if (typeof baseQ === "string")
29
        $return.push(`${base}${modDelimiter}${baseQ}`)
30
      continue
31
    }
32
33
    const isArray = $isArray(baseQ)
34
35
    // TODO check performance of `const in Array`
36
    for (const mod in baseQ) {
37
      //@ts-expect-error //TODO Split Array and Object?
38
      const modValue = baseQ[mod]
39
      if (!modValue)
40
        continue
41
42
      $return.push(`${base}${
43
        isArray
44
        ? ""
45
        : `${modDelimiter}${mod}`
46
      }${
47
        typeof modValue !== "string"
48
        ? ""
49
        : `${modDelimiter}${modValue}`
50
      }`)
51
    }
52
  }
53
  
54
  return $return
55
}
56
57
function setOptions({
58
  elementDelimiter: elD = elementDelimiter,
59
  modDelimiter: modDel = modDelimiter
60
}: Partial<BemOptions>) {
61
  modDelimiter = modDel
62
  elementDelimiter = elD
63
}
64